package com.zz.nondatain.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 日期工具类
 */
public class DateUtils {

    private static final String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_FORMAT_DATE = "yyyy-MM-dd";
    private static final String DATE_FORMAT_TIME = "HH:mm:ss";
    private static final String DATE_FORMAT_MONTH_DAY_TIME = "MM-dd HH:mm";

    private DateUtils() {
        // 私有构造方法，防止实例化
    }

    /**
     * 将时间戳转换为指定格式的日期字符串
     *
     * @param timestamp 时间戳
     * @param format    日期格式
     * @return 格式化后的日期字符串
     */
    public static String formatTime(long timestamp, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
        return sdf.format(new Date(timestamp));
    }

    /**
     * 将时间戳转换为完整的日期时间格式（yyyy-MM-dd HH:mm:ss）
     *
     * @param timestamp 时间戳
     * @return 格式化后的日期时间字符串
     */
    public static String formatFullDateTime(long timestamp) {
        return formatTime(timestamp, DATE_FORMAT_FULL);
    }

    /**
     * 将时间戳转换为日期格式（yyyy-MM-dd）
     *
     * @param timestamp 时间戳
     * @return 格式化后的日期字符串
     */
    public static String formatDate(long timestamp) {
        return formatTime(timestamp, DATE_FORMAT_DATE);
    }

    /**
     * 将时间戳转换为时间格式（HH:mm:ss）
     *
     * @param timestamp 时间戳
     * @return 格式化后的时间字符串
     */
    public static String formatTime(long timestamp) {
        return formatTime(timestamp, DATE_FORMAT_TIME);
    }

    /**
     * 将时间戳转换为月日时间格式（MM-dd HH:mm）
     *
     * @param timestamp 时间戳
     * @return 格式化后的月日时间字符串
     */
    public static String formatMonthDayTime(long timestamp) {
        return formatTime(timestamp, DATE_FORMAT_MONTH_DAY_TIME);
    }

    /**
     * 获取友好的时间显示格式
     * 如：刚刚、x分钟前、x小时前、昨天、前天、x天前
     *
     * @param timestamp 时间戳
     * @return 友好的时间显示
     */
    public static String getFriendlyTimeSpan(long timestamp) {
        long now = System.currentTimeMillis();
        long diff = now - timestamp; // 与当前时间相差毫秒数
        
        long seconds = diff / 1000;
        long minutes = seconds / 60;
        long hours = minutes / 60;
        long days = hours / 24;
        
        if (seconds < 60) {
            return "刚刚";
        } else if (minutes < 60) {
            return minutes + "分钟前";
        } else if (hours < 24) {
            return hours + "小时前";
        } else if (days == 1) {
            return "昨天";
        } else if (days == 2) {
            return "前天";
        } else if (days <= 7) {
            return days + "天前";
        } else {
            return formatDate(timestamp);
        }
    }
} 